package com.richman.hg;

import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

import com.richman.controller.NegativeRatioClient;
import com.richman.ps38.PS38Http;
import com.richman.ps38.entity.BetAdyData;
import com.richman.ps38.entity.HGEvent;
import com.richman.ps38.entity.RedcardsRecords;

public class HGManager {
	
	public static Vector<RedcardsRecords> redcardsRecords = new Vector<RedcardsRecords>(); 
	
	public int usedSpecialAccountIndex = 0;
	
	public int usedAccountIndex = 0;
	
	Vector<HGHttp> accounts = new Vector<HGHttp>();
	
	Vector<HGHttpSpecial> specialAccounts = new Vector<HGHttpSpecial>();
	
	//HGHttpSpecial specialAccount = null;
	
	Vector<String> accountnames = new Vector<String>();
	
	public void useNextSpecialAccount() {
		usedSpecialAccountIndex += 1;
		if(specialAccounts.size() <= usedSpecialAccountIndex) {
			usedSpecialAccountIndex = 0;
		}
	}
	
	public void useNextAccount() {
		usedAccountIndex += 1;
		if(accounts.size() <= usedAccountIndex) {
			usedAccountIndex = 0;
		}
	}
	
	public String getinUsedAccountName() {
		return accountnames.elementAt(usedAccountIndex);
	}

	
	
	public void init() {
		
		Vector<String[]> tmps = NegativeRatioClient.mainWnd.getHGAccounts();

		if(tmps.size() > 0) {
//			HGHttp hghttp = new HGHttp();
//			hghttp.setLoginParams(tmps.elementAt(0)[0], tmps.elementAt(0)[1],
//					tmps.elementAt(0)[2]);
//			accountnames.add(tmps.elementAt(0)[1]);
//			account = hghttp;
			
			for(int i = 0; i < tmps.size(); i++) {
				HGHttp hghttp = new HGHttp();
				hghttp.setLoginParams(tmps.elementAt(i)[0], tmps.elementAt(i)[1],
						tmps.elementAt(i)[2]);
				accountnames.add(tmps.elementAt(i)[1]);
				accounts.add(hghttp);				
			}
			
		}	
		
		if(tmps.size() > 1) {

//			for(int i = 1; i < tmps.size(); i++) {
//				HGHttpSpecial hghttp = new HGHttpSpecial();
//				hghttp.setLoginParams(tmps.elementAt(i)[0], tmps.elementAt(i)[1],
//						tmps.elementAt(i)[2]);
//				accountnames.add(tmps.elementAt(i)[1]);
//				specialAccounts.add(hghttp);
//				
//			}
			
			
//			HGHttpSpecial hghttp = new HGHttpSpecial();
//			hghttp.setLoginParams(tmps.elementAt(1)[0], tmps.elementAt(1)[1],
//					tmps.elementAt(1)[2]);
//			accountnames.add(tmps.elementAt(1)[1]);
//			specialAccount = hghttp;
		}	
		

		NegativeRatioClient.mainWnd.updateBrowserAccounts(accountnames);
		
	}
	
	
//	public Vector<String> getaccountnames(){
//		return accountnames;
//	}
	



//	public void setSpecialCookie() {
//		
////		if(specialAccount != null) {
////			specialAccount.setCookie();
////		}
//		
//		if(specialAccounts.size() >0) {
//			specialAccounts.elementAt(usedSpecialAccountIndex).setCookie();
//		}
//
//	}

	
	public void login() {
		

		if(accounts.size() > 0) {
			
			for(int i = 0; i < accounts.size(); i++) {
				if(accounts.elementAt(i).getStatusCode() == -1) {
					accounts.elementAt(i).login();
				}
				if((accounts.elementAt(i).getStatusCode() == -2) && (System.currentTimeMillis() > accounts.elementAt(i).getCanLoginTime())) {
					accounts.elementAt(i).login();
				}
			}
			
		}
		
//		if(specialAccount != null) {
//			if(specialAccount.getStatusCode() == -1) {
//				specialAccount.login();
//			}
//			
//			if((specialAccount.getStatusCode() == -2) && (System.currentTimeMillis() > specialAccount.getCanLoginTime())) {
//				specialAccount.login();
//			}
//		}

		if(specialAccounts.size() > 0) {
			
			for(int i = 0; i < specialAccounts.size(); i++) {
				if(specialAccounts.elementAt(i).getStatusCode() == -1) {
					specialAccounts.elementAt(i).login();
				}
				if((specialAccounts.elementAt(i).getStatusCode() == -2) && (System.currentTimeMillis() > specialAccounts.elementAt(i).getCanLoginTime())) {
					specialAccounts.elementAt(i).login();
				}
			}
			
		}
		
	}
	

	public void checkIsOnline() {
		
		if( accounts.size() > 0) {
			
			for(int i = 0; i < accounts.size(); i++) {
				if((accounts.elementAt(i).getStatusCode() == 1) && (System.currentTimeMillis() > accounts.elementAt(i).getCheckOnlineTime())) {
					accounts.elementAt(i).checkIsOnline();
				}
			}
			
			
		}
		
//		if( specialAccount!= null) {
//			if((specialAccount.getStatusCode() == 1) && (System.currentTimeMillis() > specialAccount.getCheckOnlineTime())) {
//				specialAccount.checkIsOnline();
//			}
//		}
		
		if( specialAccounts.size() > 0) {
			
			for(int i = 0; i < specialAccounts.size(); i++) {
				if((specialAccounts.elementAt(i).getStatusCode() == 1) && (System.currentTimeMillis() > specialAccounts.elementAt(i).getCheckOnlineTime())) {
					specialAccounts.elementAt(i).checkIsOnline();
				}
			}
			
			
		}
		
	}


	public Map<String, String> updateRatio(String gid, String type, String gnum, String strong, String rtype,
			String wtype) {
		if(accounts.size() > 0) {
			return accounts.elementAt(usedAccountIndex).updateRatio(gid, type, gnum, strong, rtype, wtype);
		}
		return null;
	}

	public Map<String, String> updateSpecialAccountRatio(String gid, String type, String gnum, String strong, String rtype,
			String wtype) {
		
		if(specialAccounts.size() > usedSpecialAccountIndex) {
			return specialAccounts.elementAt(usedSpecialAccountIndex).updateRatio(gid, type, gnum, strong, rtype, wtype);
		}
		return null;
		
//		if(specialAccount != null) {
//			return specialAccount.updateRatio(gid, type, gnum, strong, rtype, wtype);
//		}
//		return null;
	}

	

	public int getStatuscode() {
		if(accounts.size() > usedAccountIndex) {
			return accounts.elementAt(usedAccountIndex).getStatusCode();
		}
		
		return -1;
	}

	public int getSpecialAccountStatuscode() {
		
		if(specialAccounts.size() > usedSpecialAccountIndex) {
			return specialAccounts.elementAt(usedSpecialAccountIndex).getStatusCode();
		}
		
		return -1;
		
		
//		if(specialAccount != null) {
//			return specialAccount.getStatusCode();
//		}
//		
//		return -1;
	}

	public Map<String,String> dobet(Map<String,String> betParam, int gold) {
		if(accounts.size() > usedAccountIndex) {
			return accounts.elementAt(usedAccountIndex).doBet(betParam, gold);
		}
		return null;
	}
	
	public Map<String,String> dobetSpecialaccount(String betParam, int gold) {
		
		if(specialAccounts.size() > usedSpecialAccountIndex) {
			return specialAccounts.elementAt(usedSpecialAccountIndex).doBet(betParam, gold);
		}
		return null;
//		if(specialAccount != null) {
//			return specialAccount.doBet(betParam, gold);
//		}
//		return null;
	}
	
	public String getShowTodayRecURL(int index) {
		if(accounts.size() > index) {
			return accounts.elementAt(index).getShowTodayRecURL();
		}
		return null;
	}

	public String getSpecialAccountShowTodayRecURL(int index) {
		if(specialAccounts.size() > index) {
			return specialAccounts.elementAt(index).getShowTodayRecURL();
		}
		return null;
	}

	
	public String getUser_id(int index) {
		if(accounts.size() > index) {
			return accounts.elementAt(index).getuser_id();
		}
		return null;			
	}

	public String getSpecialAccountUser_id(int index) {
		if(specialAccounts.size() > index) {
			return specialAccounts.elementAt(index).getuser_id();
		}
		return null;		
	}

	
	public String getHistoryRecURL(int index) {
		if(accounts.size() > index) {
			return accounts.elementAt(index).getHistoryRecURL();
		}
		return null;
	}
	
	public String getHistoryRecPostData(int index) {
		if(accounts.size() > index) {
			return accounts.elementAt(index).getHistoryRecPostData();
		}
		return null;
	}

	public String getSpecialAccountHistoryRecURL(int index) {
		if(specialAccounts.size() > index) {
			return specialAccounts.elementAt(index).getHistoryRecURL();
		}
		return null;
	}

	

	public void updatehgBetLogData(Vector<BetAdyData> betLogDatas) {

		if(accounts.size() > usedAccountIndex && accounts.elementAt(usedAccountIndex).getStatusCode() == 1) {
			accounts.elementAt(usedAccountIndex).updatehgBetLogData(betLogDatas);
		}
	}

	
	public void updatehgSpecialAccountBetLogData(Vector<BetAdyData> betLogDatas) {
//		if(specialAccount != null && specialAccount.getStatusCode() == 1) {
//			specialAccount.updatehgBetLogData(betLogDatas);
//		}
		
		if(specialAccounts.size() > usedSpecialAccountIndex && specialAccounts.elementAt(usedSpecialAccountIndex).getStatusCode() == 1) {
			specialAccounts.elementAt(usedSpecialAccountIndex).updatehgBetLogData(betLogDatas);
		}
		
	}


	public void checkIllegalBet() {
//		if(account != null && account.getStatusCode() == 1) {
//			account.checkIllealBet();
//		}
//		
		
		if(accounts.size() > usedAccountIndex && accounts.elementAt(usedAccountIndex).getStatusCode() == 1) {
			accounts.elementAt(usedAccountIndex).checkIllealBet();
		}
		
	}

	public void checkSpecialIllegalBet() {
//		if(specialAccount != null && specialAccount.getStatusCode() == 1) {
//			specialAccount.checkIllealBet();
//		}
		
		for(int i = 0 ;i <specialAccounts.size(); i++ ) {
			if(specialAccounts.elementAt(i) != null && specialAccounts.elementAt(i).getStatusCode() == 1) {
				specialAccounts.elementAt(i).checkIllealBet();
			}
		}

	}

	

	public String getAccounttype() {

		
		if(accounts.elementAt(usedAccountIndex) != null ) {
			return accounts.elementAt(usedAccountIndex).getmtype();
		}
		
		return "3";
	}

	
	public String getSpecialAccounttype() {
//		if(specialAccount != null ) {
//			return specialAccount.getmtype();
//		}
		if(specialAccounts.elementAt(usedSpecialAccountIndex) != null ) {
			return specialAccounts.elementAt(usedSpecialAccountIndex).getmtype();
		}
		
		return "3";
	}


	public Map<String, String> getInplaybetScores() {
		
		if(accounts.elementAt(usedAccountIndex) != null && accounts.elementAt(usedAccountIndex).getStatusCode()==1 ) {
			return accounts.elementAt(usedAccountIndex).getInplaybetScores();
		}
		
		return null;
	}
	
	public void getRedCard() {

		
		if(accounts.elementAt(usedAccountIndex) != null && accounts.elementAt(usedAccountIndex).getStatusCode()==1 ) {
			accounts.elementAt(usedAccountIndex).getInplaybet();
		}
	}


	public Vector<HGEvent> getSpecialAccountInplaybet() {
//		if(specialAccount != null ) {
//			return specialAccount.getInplaybet();
//		}
		
		if(specialAccounts.elementAt(usedSpecialAccountIndex) != null ) {
			return specialAccounts.elementAt(usedSpecialAccountIndex).getInplaybet();
		}
		
		return null;
	}
	
	public void getD() {
		if(accounts.size() > usedAccountIndex && accounts.elementAt(usedAccountIndex).getStatusCode() == 1) {
			accounts.elementAt(usedAccountIndex).getgameresult();
		}		
	}

	
	
	public void getDanshiPankouAndDaxiao() {
		if(accounts.size() > usedAccountIndex && accounts.elementAt(usedAccountIndex).getStatusCode() == 1) {
			accounts.elementAt(usedAccountIndex).getDanshiPankouAndDaxiao();
		}		
	}
	
	public void getgameresult() {
		if(accounts.size() > usedAccountIndex && accounts.elementAt(usedAccountIndex).getStatusCode() == 1) {
			accounts.elementAt(usedAccountIndex).getgameresult();
		}		
	}

	public String getOutlineData(Integer index) {
		// TODO Auto-generated method stub
		
		if(accounts.size() > index) {
			return accounts.elementAt(index).getOutlineData();
		}
		return null;

	}

	public String getDetailsData(Integer index,String datetime) {
		if(accounts.size() > index) {
			return accounts.elementAt(index).getDetailsData(datetime);
		}
		return null;
	}
	
}
